package com.zc.campus_shops.web.frontend;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.zc.campus_shops.dto.ShopExecution;
import com.zc.campus_shops.entity.Area;
import com.zc.campus_shops.entity.Shop;
import com.zc.campus_shops.entity.ShopCategory;
import com.zc.campus_shops.service.AreaService;
import com.zc.campus_shops.service.ShopCategoryService;
import com.zc.campus_shops.service.ShopService;
import com.zc.campus_shops.util.HttpServletRequestUtil;

@Controller
@RequestMapping("/frontend")
public class ShopListController {

	@Autowired
	private AreaService areaService;
	
	@Autowired
	private ShopCategoryService shopCategoryService;
	
	@Autowired
	private ShopService shopService;
	
	/**
	 * 返回商品列表页里的ShopCategory列表（二级或一级），以及区域信息列表
	 * @param request
	 * @return
	 */
	@RequestMapping(value="/listshopspageinfo",method=RequestMethod.GET)
	@ResponseBody
	private Map<String, Object> listShopsPageInfo(HttpServletRequest request){
		Map<String, Object> modelMap = new HashMap<String,Object>();
		//试着从前端获取parentId
		long parentId = HttpServletRequestUtil.getLong(request, "parentId");
		List<ShopCategory> shopCategoryList = new ArrayList<ShopCategory>();
		
		if(parentId != -1){
			//如果存在parentId，则取出该一级ShopCategory下的二级ShopCategory列表
			try{
				ShopCategory shopCategoryCondition = new ShopCategory();
				ShopCategory parent = new ShopCategory();
				parent.setShopCategoryId(parentId);
				shopCategoryCondition.setParent(parent);
				shopCategoryList = shopCategoryService.getShopCategoryList(shopCategoryCondition);
			}catch(Exception e){
				modelMap.put("success", false);
				modelMap.put("errMsg", e.getMessage());
			}
		}else{
			try{
				shopCategoryList = shopCategoryService.getShopCategoryList(null);
			}catch(Exception e){
				modelMap.put("success", false);
				modelMap.put("errMsg", e.getMessage());
			}
			modelMap.put("shopCategoryList", shopCategoryList);
			List<Area> areaList = null;
			try{
				//获取区域列表信息
				areaList = areaService.getAreaList();
				modelMap.put("areaList", areaList);
				modelMap.put("success", true);
			}catch (Exception e) {
				modelMap.put("success", false);
				modelMap.put("errMsg", e.getMessage());
			}
			
			
		}
		return modelMap;
	}
	/**
	 * 获取商品类别并分页显示
	 * @param request
	 * @return
	 */
	@RequestMapping(value="/listshops",method=RequestMethod.GET)
	@ResponseBody
	private Map<String, Object> listShops(HttpServletRequest request){
		Map<String, Object> modelMap = new HashMap<String,Object>();
		//获取页码
		int pageIndex = HttpServletRequestUtil.getInt(request, "pageIndex");
		//获取一页显示的数据条数
		int pageSize = HttpServletRequestUtil.getInt(request, "pageSize");
		
		if((pageIndex > -1) && (pageSize >-1)){
			//获取一级类别Id
			long parentId = HttpServletRequestUtil.getLong(request, "parentId");
			//获取二级类别Id
			long shopCategoryId  = HttpServletRequestUtil.getLong(request, "shopCategoryId");
			//获取区域Id
			int areaId = HttpServletRequestUtil.getInt(request, "areaId");
			//获取商品名字叫
			String shopName = HttpServletRequestUtil.getString(request, "shopName");
			//获取组合之后的查询条件
			Shop shopCondition = compactShopCondition4Search(parentId,shopCategoryId,areaId,shopName);
			//根据查询条件和分页信息获取店铺列表，并返回总数
			ShopExecution se = shopService.getShopList(shopCondition, pageIndex, pageSize);
			modelMap.put("shopList", se.getShopList());
			modelMap.put("count", se.getCount());
			modelMap.put("success", true);
		}else{
			modelMap.put("success", false);
			modelMap.put("errMsg", "empty pageSize or pageIndex");
		}
		return modelMap;
	}
	
	private Shop compactShopCondition4Search(long parentId,long shopCategoryId,int areaId,String shopName){
		Shop shopCondition = new Shop();
		if(parentId != -1L){
			//查询某一个一级shopCategory下的二级shopCategory里面的店铺列表
			ShopCategory childCategory = new ShopCategory();
			ShopCategory parentCategory = new ShopCategory();
			parentCategory.setShopCategoryId(parentId);
			childCategory.setParent(parentCategory);
			shopCondition.setShopCategory(childCategory);
		}
		if(shopCategoryId != -1L){
			//查询某一个二级shopCategory下的店铺列表
			ShopCategory shopCategory = new ShopCategory();
			shopCategory.setShopCategoryId(shopCategoryId);
			shopCondition.setShopCategory(shopCategory);
		}
		if(areaId != -1L){
			//查询某个区域Id下的店铺列表
			Area area = new Area();
			area.setAreaId(areaId);
			shopCondition.setArea(area);
		}
		if(shopName != null){
			//查询某个商铺的名字
			shopCondition.setShopName(shopName);
			
		}
		//前端展示的店铺都是审核通过的店铺
		shopCondition.setEnableStatus(1);
		return shopCondition;
	}
}
